#ifndef SEMANTICNODENAMESPACE_H_
#define SEMANTICNODENAMESPACE_H_

#include <string>
#include <sstream>
#include <map>
#include <vector>
#include "SemanticNode.h"

#include "../syntax_tree.h"
#include "../main_container.h"


//TODO brisi
#include "OurSemanticAnalyzer.h"



class SemanticNodeSimulation;
class SemanticNodeEnum;
class SemanticNodeClass;
class SemanticNodeField;
class SemanticNodeSimulation;
class SemanticNodeModel;
class SemanticNodeMethod;
class SemanticNodeProperty;
class UsingDirectives;





extern MainContainer *CompilerData;

class SemanticNodeNamespace : public SemanticNode {

private:

	std::string name;
	UsingDirectives *usingDirectives;

	std::vector<SemanticNodeSimulation *> simulations;
	std::vector<SemanticNodeNamespace *> namespaces;
	std::vector<SemanticNodeEnum *> enums;
	std::vector<SemanticNodeClass *> classes;
	std::vector<SemanticNodeField *> fields;
	std::vector<SemanticNodeModel *> models;
	std::vector<SemanticNodeMethod *> methods;
	std::vector<SemanticNodeProperty *> properties;


protected:

public:
	SemanticNodeNamespace(const SyntaxTreeNode &syntaxNode, SemanticNode *parentNode);
	virtual ~SemanticNodeNamespace();

	virtual std::string toDebugString(int tab);
};

#endif /* SEMANTICNODENAMESPACE_H_ */
